package cn.com.infcn.spider.io;

import java.io.BufferedReader;
import java.util.List;

import org.nlpcn.commons.lang.util.IOUtil;
import org.nlpcn.commons.lang.util.StringUtil;
import org.nutz.lang.stream.StringReader;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class ConfigParse {

	public static JSONArray parse(String configStr) {
		List<String> lines = IOUtil.readFile2List(new BufferedReader(new StringReader(configStr)));

		JSONArray result = new JSONArray();

		for (int i = 0; i < lines.size(); i++) {
			String temp = lines.get(i).trim();
			if (StringUtil.isBlank(temp)) {
				continue;
			}

			if (temp.charAt(0) == '#') {
				i = beginCreate(result, lines, i);
			}

		}

		return result;

	}

	private static int beginCreate(JSONArray result, List<String> lines, int i) {

		String key = lines.get(i).substring(1);

		int j = i + 1;

		StringBuilder sb = new StringBuilder();

		for (; j < lines.size(); j++) {
			String temp = lines.get(j).trim();
			if (StringUtil.isBlank(temp)) {
				continue;
			}

			if (temp.charAt(0) == '#') {
				if (sb.charAt(0) == '[') {
					JSONObject jsonObject = new JSONObject();
					jsonObject.put("type", key);
					jsonObject.put("obj", JSONArray.parseArray(sb.toString()));
					result.add(jsonObject);
				} else {
					JSONObject jsonObject = new JSONObject();
					jsonObject.put("type", key);
					jsonObject.put("obj", JSONObject.parseObject(sb.toString()));
					result.add(jsonObject);
				}
				return --j;
			} else {
				sb.append(lines.get(j));
			}

		}

		if (sb.charAt(0) == '[') {
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("type", key);
			jsonObject.put("obj", JSONArray.parseArray(sb.toString()));
			result.add(jsonObject);
		} else {
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("type", key);
			jsonObject.put("obj", JSONObject.parseObject(sb.toString()));
			result.add(jsonObject);
		}

		return j;
	}
}
